package il.co.gadiworks.testingstuff;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;

public class MultiTouchTest extends Activity implements OnTouchListener {
	
	StringBuilder builder = new StringBuilder();
	TextView textView;
	float[] x = new float[10];
	float[] y = new float[10];
	boolean[] touched = new boolean[10];
	
	private void updateTextView() {
		builder.setLength(0);
		for (int i = 0; i < 10; i++) {
			builder.append(touched[i]).append(", ").append(x[i]).append(", ").append(y[i]).append("\n");
		}
		
		textView.setText(builder.toString());
	}
	
	/** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	
    	textView = new TextView(this);
    	textView.setText("Touch and drag (multiple fingers suppoted)!");
    	textView.setOnTouchListener(this);
    	setContentView(textView);
    }

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		int action = event.getAction() & MotionEvent.ACTION_MASK;
		int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) >> MotionEvent.ACTION_POINTER_ID_SHIFT;
		int pointerId = event.getPointerId(pointerIndex);
		
		switch (action) {
		case MotionEvent.ACTION_DOWN:
		case MotionEvent.ACTION_POINTER_DOWN:
			touched[pointerId] = true;
			x[pointerId] = (int) event.getX(pointerIndex);
			y[pointerId] = (int) event.getY(pointerIndex);
			break;
		case MotionEvent.ACTION_UP:
		case MotionEvent.ACTION_POINTER_UP:
		case MotionEvent.ACTION_CANCEL:
			touched[pointerId] = false;
			x[pointerId] = (int) event.getX(pointerIndex);
			y[pointerId] = (int) event.getY(pointerIndex);
			break;
		case MotionEvent.ACTION_MOVE:
			int pointerCount = event.getPointerCount();
			for (int i = 0; i < pointerCount; i++) {
				pointerIndex = i;
				pointerId = event.getPointerId(pointerIndex);
				x[pointerId] = (int) event.getX(pointerIndex);
				y[pointerId] = (int) event.getY(pointerIndex);
			}
			break;
		}
		
		updateTextView();
		return true;
	}
}
